from werkzeug.security import generate_password_hash, check_password_hash

from App.ext import db
from App.models import BaseModel

# 因为都是内部管理员，权限这里就不设置黑名单了
PERMISSION_NONE = 0     # 考虑到员工离职的时候，把权限换掉
PERMISSION_COMMON = 2

# 不需要手机号来注册了，普通用户都是由超管创建出来的
class AdminUser(BaseModel):
    username = db.Column(db.String(32) , unique=True)
    _password = db.Column(db.String(256))
    is_delete = db.Column(db.Boolean , default=False)
    is_super = db.Column(db.Boolean , default = False)
    permission = db.Column(db.Integer , default=PERMISSION_COMMON)        #权限

    @property
    def password(self):
        raise Exception('不给你访问')

    @password.setter
    def password(self , password_value_parameter):
        self._password = generate_password_hash(password_value_parameter)

    # 密码哈希检测
    def check_password(self , password_value_parameter):
        return check_password_hash(self._password , password_value_parameter)

    def check_permission(self , permission):        # 用于判断用户是否拥有所给的形参的权限（不特指某一种，是可变的）

        return self.is_super or (permission & self.permission == permission) # 省去if的判断语句，这种写法挺好的